#ifndef ANALYSIS_FOR_EIGHTIBT_H_H
#define ANALYSIS_FOUR_EIGHTBIT_H_H

#include "intersection_set.h"
#include "common.h"
#include "mul_preparation.h"

word f_function_for_eightbit( word eight_bit ) ;
word sub_error_for_eightbit( word left_part , word right_part ) ;
//word get_original_dif_for_eightbit( word original_dif , int shiftnum ) ;
void sub_function_for_eightbit( word left_part , word right_part , borrow_bit low , word add , borrow_bit& high , word& sub_result ) ;
void differential_f_for_eightbit( word xor_error , word original_dif_b , int shiftnum , intersectionset* a_list , intersectionset* b_list ) ; 
void differential_f_for_aeightbit( intersectionset original_a_list , word b_six , word xor_error , word original_dif_b , int shiftnum , intersectionset* a_list ) ;
word f_function_for_nexteight( word element , int size , int shift )  ;
void differential_f_for_nexteight( mul_list* b_subsequent_six , word xor_error , word original_dif_b , int shiftnum , intersectionset* a_list , intersectionset* b_list ) ;
void get_six_bit( intersectionset* list , word six_bit ) ;
void differential_f_for_anexteight( mul_list* b_subsequent_six , intersectionset original_a_list , word b_six , word xor_error , word original_dif_b , int shiftnum , intersectionset* a_list ) ;
void differential_f_for_thirdeight( mul_list* b_subsequent_six , word insert_error , word original_dif_b , int shiftnum , intersectionset* a_list , intersectionset* b_list ) ;
void differential_f_for_athirdeight( mul_list* b_subsequent_six , intersectionset original_a_list , word b_six , word xor_error , word original_dif_b , int shiftnum , intersectionset* a_list ) ;
void differential_f_for_fourtheight( mul_list* b_subsequent_six , word xor_error , word original_dif_b , int shiftnum , intersectionset* a_list , intersectionset* b_list ) ;
void differential_f_for_afourtheight( mul_list* b_subsequent_six , intersectionset original_a_list , word b_six , word xor_error , word original_dif_b , int shiftnum , intersectionset* a_list ) ;
void differential_f_for_fiftheight( mul_list* b_subsequent_six , word xor_error , word original_dif_b , int shiftnum , intersectionset* a_list , intersectionset* b_list ) ;
void differential_f_for_afiftheight( mul_list* b_subsequent_six , intersectionset original_a_list , word b_six , word xor_error , word original_dif_b , int shiftnum , intersectionset* a_list ) ;
void last_two_bit( mul_list* b_six , int shiftnum , intersectionset* b_list ) ;
void compare_two_bit( intersectionset* a_list , intersectionset b_list )  ;

#endif